#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017-09-26 18:46:40
# @Author  : WUQINGLONG
# @Contact : 1603763721@qq.com

# =======================================
# 优美胜于丑陋（Python 以编写优美的代码为目标）
# 明了胜于晦涩（优美的代码应当是明了的，命名规范，风格相似）
# 简洁胜于复杂（优美的代码应当是简洁的，不要有复杂的内部实现）
# 复杂胜于凌乱（如果复杂不可避免，那代码间也不能有难懂的关系，要保持接口简洁）
# 扁平胜于嵌套（优美的代码应当是扁平的，不能有太多的嵌套）
# 间隔胜于紧凑（优美的代码有适当的间隔，不要奢望一行代码解决问题）
# 可读性很重要（优美的代码是可读的）
# =======================================

"""
功能描述：
    1.常用日志配置
"""

import logging.config
import yaml
import os

'''
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径，其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
'''
# yaml格式的log配置项
yamlConfigStr = '''
version: 1
disable_existing_loggers: true
formatters:
  hiformat:
    format: '%(asctime)s - %(thread)d - %(filename)s[%(lineno)d] - %(levelname)s - %(message)s'
    datefmt: '%Y-%m-%d %H:%M:%S'
  simple:
    format: '%(asctime)s - %(thread)d - %(filename)s[%(lineno)d] - %(levelname)s - %(message)s'
handlers:
  console:
    class: logging.StreamHandler
    level: DEBUG
    formatter: hiformat
    stream: ext://sys.stdout
  file:
    class: logging.handlers.TimedRotatingFileHandler
    level: DEBUG
    formatter: simple
    filename: /var/log/online_ad_api/online_ad_api.{pid}.log
    when: midnight
    interval: 1
    backupCount: 30
loggers:
  console:
    level: INFO
    handlers: [console]
    propagate: no
  file:
    level: INFO
    handlers: [file]
    propagate: no
root:
  level: INFO
  handlers: [file]
'''

# 解决多进程滚动日志出错
logging.config.dictConfig(yaml.load(yamlConfigStr.replace('{pid}', str(os.getpid()))))
# log = logging.getLogger('file')


# def init(port=None):
#     if port is None:
#         logging.config.dictConfig(yaml.load(yamlConfigStr.replace('{pid}', '')))
#     else:
#         logging.config.dictConfig(yaml.load(yamlConfigStr.replace('{pid}', str(port))))


if __name__ == '__main__':
    # init()
    logging.info('hello world')
    logging.warn('hello world')
    logging.error('hello world')
